package com.heima.wemedia.interceptor;

import com.heima.model.wemedia.pojos.WmUser;
import com.heima.utils.thread.WmThreadLocalUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Optional;

/**
 * 拦截用户信息，获取用户id
 *
 * @author ybw
 * @version 1.0
 * @date 2021/12/13 14:27
 */
@Slf4j
public class WmTokenInterceptor implements HandlerInterceptor {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    // 获取请求头中的用户id
    String userId = request.getHeader("userId");
    Optional<String> optional = Optional.ofNullable(userId);
    if (optional.isPresent()) {
      // 将用户id存入ThreadLocal中
      WmUser wmUser = new WmUser();
      wmUser.setId(Integer.valueOf(userId));
      WmThreadLocalUtil.setUser(wmUser);
      log.info("WmTokenInterceptor已经将用户id信息存入ThreadLocal中...");
    }
    return true;
  }

  @Override
  public void postHandle(
      HttpServletRequest request,
      HttpServletResponse response,
      Object handler,
      ModelAndView modelAndView)
      throws Exception {
    log.info("清理ThreadLocal...");
    WmThreadLocalUtil.clear();
  }
}
